home *** CD-ROM | disk | FTP | other *** search
/ Shareware Grab Bag / Shareware Grab Bag.iso / 004 / repcard.arc / REPCARD.BAS (.txt) < prev    next >
Encoding:
GW-BASIC  |  1980-01-01  |  29.4 KB  |  379 lines

  1. 10  'Report Card:  A Grading System for the Teacher
  2. 20  'IBM PC Version 1.00, Copyright 1983 by Marc Ringuette
  3. 100  GOTO 40000
  4. 500  T$="Main Menu":NUMCH=8:T$(1)="Add/Edit Classes and Students":T$(2)="Add a New Activity":T$(3)="Edit Existing Activities":T$(4)="Save/Retrieve Backup Copy of Data":T$(5)="Display Data (On the Screen)":T$(6)="Print Data (On Paper)"
  5. 510  T$(7)="Switch to a Different Data Disk":T$(8)="Change Disk/Printer Setup":T$(0)="End Session":GOSUB 21000:ON CH GOTO 2500,1000,1500,6000,6500,6600,10000,11000,19000
  6. 1000  GOSUB 20250:IF AB THEN 500 ELSE IF NUMAC>=MAXAC THEN CLS:LOCATE 10,20:PRINT"Too many activities already exist.":GOSUB 20000:GOTO 500
  7. 1020  AC=NUMAC+1:AC$(AC)=SPACE$(20):WT(AC)=10000:GR(0,AC)=10000:GOSUB 25000:IF AB THEN 500 ELSE FOR A=1 TO NUMST:GR(A,AC)=-1:NEXT:GOSUB 25500:IF AB THEN 500 ELSE NUMAC=AC:GOSUB 22300
  8. 1030  GOSUB 22700:GOTO 500
  9. 1500  T$="Edit Existing Activities":NUMCH=4:T$(1)="Edit Grades in an Activity":T$(2)="Edit Name/Total/Weight of an Activity":T$(3)="Delete an Activity":T$(4)="Delete All Activities of a Class"
  10. 1510  T$(0)="Return to Main Menu":GOSUB 21000:ON CH GOTO 1600,1700,1800,1900,500
  11. 1600  GOSUB 20260:IF AB THEN 1500 ELSE GOSUB 20450:IF AB THEN 1500 ELSE GOSUB 25500:IF AB THEN LOADED=0:GOTO 1500 ELSE GOSUB 22300:GOTO 1500
  12. 1699  '---- Edit name/tot/wt ----
  13. 1700  GOSUB 20260:IF AB THEN 1500
  14. 1710  GOSUB 20450:IF AB THEN 1500 ELSE GOSUB 25000:IF AB THEN LOADED=0:GOTO 1500
  15. 1720  GOSUB 22350:DRIVE$=DDRIVE$:GOSUB 22320:ID$(0)=MKI$(NUMST)+MKI$(NUMAC):ST=0:GOSUB 22030:GOTO 1500
  16. 1800  GOSUB 20260:IF AB THEN 1500 ELSE GOSUB 20450:IF AB THEN 1500 ELSE CLS:LOCATE 6:GOSUB 21400:LOCATE ,25:PRINT"Activity"AC": "AC$(AC):M$="delete this activity":GOSUB 21250:IF NO THEN GOSUB 21210:GOTO 1500
  17. 1810  PRINT:PRINT"Deleting activity.";:LOADED=0:FOR A=AC TO NUMAC-1:PRINT".";:AC$(A)=AC$(A+1):WT(A)=WT(A+1):FOR B=0 TO NUMST:GR(B,A)=GR(B,A+1):NEXT:NEXT:PRINT:NUMAC=NUMAC-1:GOSUB 22300:GOTO 1500
  18. 1900  GOSUB 20300:IF AB THEN 1500 ELSE GOSUB 22200:CLS:LOCATE 8:GOSUB 21400:LOCATE 10,24:PRINT NUMST"Students,"NUMAC"Activities Graded.":M$="delete all activities of this class":GOSUB 21250:IF NO THEN GOSUB 21210:GOTO 1500
  19. 1910  NUMAC=0:GOSUB 22300:GOTO 1500
  20. 2500  T$="Add/Edit Classes and Students":NUMCH=4:T$(1)="Add/Edit Class Names":T$(2)="Add/Edit Students & ID Codes":T$(3)="Sort Roster of a Class"
  21. 2510  T$(4)="Delete All Classes & Start Over":T$(0)="Return to Main Menu":GOSUB 21000:ON CH GOTO 3500,2600,3000,4100,500
  22. 2600  GOSUB 20300:IF AB THEN 2500 ELSE GOSUB 22200:FOR ST=NUMST+1 TO MAXST:GOSUB 29000:NEXT
  23. 2610  OKEX$=ESC$+FIL$+INS$+DEL$+REGEX$:CLS:GOSUB 21500:M$="student":GOSUB 21550:F$="###.  [\"+SPACE$(18)+"\]"+SPACE$(6)+"[\"+SPACE$(10)+"\]":FLIN=1:CURR=1:LEFSIDE=TRUE:LLIN=WSIZ:IF LLIN>MAXST THEN LLIN=MAXST
  24. 2620  COLOR 15,0:LOCATE 4,25:PRINT" Student ":LOCATE 4,51:PRINT" ID Code  ":COLOR 7,0
  25. 2630  LOCATE 1,1:GOSUB 21400:GOSUB 2960
  26. 2640  FOR A=FLIN TO LLIN:LOCATE WTOP+A-FLIN,WLEF:PRINT USING F$;A;ST$(A);ID$(A):NEXT
  27. 2650  OK$="":IF LEFSIDE THEN LOCATE WTOP+CURR-FLIN,22:IN$=ST$(CURR):ILEN=20:GOSUB 20100:ST$(CURR)=IN$ ELSE LOCATE WTOP+CURR-FLIN,50:IN$=ID$(CURR):ILEN=12:GOSUB 20100:ID$(CURR)=IN$
  28. 2660  IF CHANGED AND CURR>NUMST THEN FOR ST=NUMST+1 TO CURR:GOSUB 29010:NEXT:NUMST=CURR:GOSUB 2960
  29. 2670  IF EX$=RET$ THEN CURR=CURR+1:LEFSIDE=TRUE:GOTO 2840
  30. 2680  IF EX$=TAB$ THEN IF LEFSIDE THEN LEFSIDE=FALSE:GOTO 2840 ELSE LEFSIDE=TRUE:CURR=CURR+1:GOTO 2840
  31. 2690  IF EX$=DNARR$ THEN CURR=CURR+1:GOTO 2840
  32. 2700  IF EX$=UPARR$ THEN CURR=CURR-1:GOTO 2840
  33. 2720  IF EX$<>INS$ THEN 2760 ELSE IF CURR>NUMST THEN 2950 ELSE M$="insert a student before #"+STR$(CURR)+" ":GOSUB 21250:IF NO THEN 2760
  34. 2740  IF NUMST=MAXST THEN M$="The class is full":GOSUB 21200:GOTO 2760
  35. 2750  M$="Inserting student":GOSUB 21300:LOADED=0:FOR A=NUMST TO CURR STEP -1:ST$(A+1)=ST$(A):ID$(A+1)=ID$(A):FOR B=1 TO NUMAC:GR(A+1,B)=GR(A,B):NEXT:NEXT:NUMST=NUMST+1:ST=CURR:GOSUB 29000:GOSUB 29010:LOADED=CL:GOSUB 21100:GOTO 2630
  36. 2760  IF EX$<>DEL$ THEN 2790 ELSE IF CURR>NUMST THEN 2950 ELSE M$="delete student #"+STR$(CURR)+" ":GOSUB 21250:IF NO THEN 2790
  37. 2770  M$="Deleting student":GOSUB 21300:LOADED=0:FOR A=CURR TO NUMST-1:ST$(A)=ST$(A+1):ID$(A)=ID$(A+1):FOR B=1 TO NUMAC:GR(A,B)=GR(A+1,B):NEXT:NEXT:ST=NUMST:GOSUB 29000:NUMST=NUMST-1:LOADED=1:GOSUB 21100:GOTO 2630
  38. 2790  IF EX$=ESC$ THEN M$="abandon all changes":GOSUB 21250:IF YES THEN LOADED=0:GOTO 2500
  39. 2800  IF EX$=FKEY1$ THEN 2900
  40. 2840  IF CURR>MAXST THEN CURR=MAXST ELSE IF CURR<1 THEN CURR=1
  41. 2850  IF CURR>LLIN THEN GOSUB 21600:FLIN=FLIN+1:LLIN=LLIN+1:LOCATE WBOT,WLEF:PRINT USING F$;LLIN;ST$(LLIN);ID$(LLIN):GOTO 2850
  42. 2860  IF CURR<FLIN THEN GOSUB 21610:FLIN=FLIN-1:LLIN=LLIN-1:LOCATE WTOP,WLEF:PRINT USING F$;FLIN;ST$(FLIN);ID$(FLIN):GOTO 2860
  43. 2880  GOTO 2650
  44. 2900  GOSUB 22300:GOSUB 22700:GOTO 2500
  45. 2950  M$="You're past the end of the class":GOSUB 21200:GOTO 2650
  46. 2960  LOCATE 2,20:PRINT"Currently"NUMST"students -- maximum"MAXST". ":RETURN
  47. 3000  T$="Sort roster of a class":NUMCH=5:T$(1)="Sort by Last Names":T$(2)="Sort by First Names":T$(3)="Sort by ID Codes":T$(4)="Sort by Averages":T$(5)="Design Your Own Order":T$(0)="Return to Menu":GOSUB 21000:IF CH=6 THEN 2500
  48. 3010  IF CH=4 THEN GOSUB 20260 ELSE GOSUB 20250
  49. 3020  IF AB THEN 3000 ELSE ON CH GOSUB 26000,26050,26080,26100,26150:IF AB THEN 3000
  50. 3030  CLS:PRINT TAB(25)"Here is the new order:":FOR C=1 TO NUMST:LOCATE (C-1) MOD 20+4,(((C-1) MOD 40)\20)*40+1:PRINT USING FMT1$+" \"+SPACE$(10)+"\";C;ST$(I(C));ID$(I(C)):IF C MOD 40=0 THEN GOSUB 20000:CLS
  51. 3040  NEXT:M$="Should this new order permanently replace the old one":GOSUB 21350:IF NO THEN M$="Existing order not changed":GOSUB 21200:GOTO 3000 ELSE GOSUB 26300:GOSUB 22300:GOTO 3000
  52. 3500  OKEX$=ESC$+FIL$+INS$+DEL$+REGEX$:CLS:GOSUB 21500:M$="class":GOSUB 21550:F$="###.  [\"+SPACE$(18)+"\]":LOADED=0:NEWCL=NUMCL:FOR A=1 TO NEWCL:ST$(A)=CL$(A):I(A)=A:WT(A)=TRUE:NEXT:FOR A=NEWCL+1 TO MAXCL:ST$(A)=SPACE$(20):NEXT
  53. 3510  FLIN=1:CURR=1:LLIN=WSIZ:IF LLIN>MAXCL THEN LLIN=MAXCL
  54. 3520  LOCATE 1,1:M$=T$(CH):GOSUB 21450:GOSUB 3750
  55. 3530  FOR A=FLIN TO LLIN:LOCATE WTOP+A-FLIN,WLEF:PRINT USING F$;A;ST$(A):NEXT
  56. 3540  OK$="":LOCATE WTOP+CURR-FLIN,22:IN$=ST$(CURR):ILEN=20:GOSUB 20100:IF CHANGED THEN WHILE RIGHT$(IN$,1)=" ":IN$=LEFT$(IN$,LEN(IN$)-1):WEND:ST$(CURR)=IN$
  57. 3550  IF CHANGED AND CURR>NEWCL THEN FOR A=NEWCL+1 TO CURR:I(A)=0:NEXT:NEWCL=CURR:GOSUB 3750
  58. 3560  IF EX$=RET$ OR EX$=TAB$ OR EX$=DNARR$ THEN CURR=CURR+1:GOTO 3650
  59. 3570  IF EX$=UPARR$ THEN CURR=CURR-1:GOTO 3650
  60. 3580  IF EX$<>INS$ THEN 3600 ELSE IF CURR>NEWCL THEN 3780 ELSE M$="insert a class before #"+STR$(CURR)+" ":GOSUB 21250:IF NO THEN 3600 ELSE IF NEWCL=MAXCL THEN M$="The list is full":GOSUB 21200:GOTO 3600
  61. 3590  FOR A=NEWCL TO CURR STEP -1:ST$(A+1)=ST$(A):I(A+1)=I(A):NEXT:ST$(CURR)=SPACE$(20):I(CURR)=0:NEWCL=NEWCL+1:GOSUB 3750:GOTO 3530
  62. 3600  IF EX$<>DEL$ THEN 3650 ELSE IF CURR>NEWCL THEN 3780 ELSE M$="permanently delete class #"+STR$(CURR)+" ":GOSUB 21250:IF NO THEN 3650
  63. 3610  WT(I(CURR))=FALSE:FOR A=CURR TO NEWCL-1:ST$(A)=ST$(A+1):I(A)=I(A+1):NEXT:ST$(NEWCL)=SPACE$(20):NEWCL=NEWCL-1:GOSUB 3750:GOTO 3530
  64. 3650  IF CURR>MAXCL THEN CURR=MAXCL ELSE IF CURR<1 THEN CURR=1
  65. 3660  IF EX$=ESC$ THEN M$="abandon all changes":GOSUB 21250:IF YES THEN 2500
  66. 3670  IF EX$<>FKEY1$ THEN 3540
  67. 3700  M$="Are all class names now correct":GOSUB 21350:IF NO THEN 3540 ELSE B=FALSE:FOR A=1 TO NUMCL:IF I(A)<>A AND I(A)<>0 THEN B=TRUE
  68. 3705  NEXT:IF B THEN CLS:LOCATE 8,20:PRINT"Warning:  Any backup data disks you have made":PRINT TAB(20)"may no longer be accessible.":LOCATE 11,20:PRINT"See manual for details.":GOSUB 20000
  69. 3710  GOSUB 22350:DRIVE$=DDRIVE$:FOR CL=1 TO NUMCL:IF NOT WT(CL) THEN GOSUB 22100
  70. 3720  NEXT:FOR A=1 TO NEWCL:CL$(A)=ST$(A):B=I(A):IF B>0 THEN C=I(B):WHILE B<A AND C>0:B=C:C=I(B):WEND:IF B<>A THEN IF WT(A) THEN GOSUB 22110 ELSE GOSUB 22120:WT(B)=FALSE
  71. 3730  NEXT:NUMST=0:NUMAC=0:FOR CL=1 TO NEWCL:IF I(CL)=0 THEN GOSUB 22310
  72. 3740  NEXT:NUMCL=NEWCL:GOSUB 22510:GOTO 2500
  73. 3750  LOCATE 2,22:PRINT"Currently"NEWCL"classes - maximum"MAXCL".":RETURN
  74. 3780  M$="You're past the end of the list":GOSUB 21200:GOTO 3540
  75. 4099  '---- Delete all classes ----
  76. 4100  CLS:LOCATE 8,20:PRINT NUMCL"Classes Now Exist.":LOCATE 10,10:PRINT"If you enter 'Y', all class information on the data disk":PRINT TAB(10)"will be permanently erased.":M$="delete all classes now":GOSUB 21250:IF NO THEN GOSUB 21210:GOTO 2500
  77. 4110  DRIVE$=DDRIVE$:FOR CL=1 TO NUMCL:GOSUB 22100:NEXT:NUMCL=0:GOSUB 22500:GOTO 2500
  78. 6000  T$="Save/Retrieve Backup Copy of Data":NUMCH=2:T$(1)="Save a Backup Copy of a Class' Data":T$(2)="Retrieve Backup Data Saved Earlier":T$(0)="Return to Main Menu":GOSUB 21000:ON CH GOTO 6100,6300,500
  79. 6100  GOSUB 20300:IF AB THEN 6000 ELSE GOSUB 22200
  80. 6110  GOSUB 22600:GOTO 6000
  81. 6300  GOSUB 20300:IF AB THEN 6000
  82. 6310  M$="retrieve":GOSUB 29050:IF CHAR=2 THEN LOADED=0:PRINT:DRIVE$=BDRIVE$:GOSUB 22210:LOADED=0 ELSE 6000
  83. 6340  GOSUB 29100:CLS:PRINT:PRINT:GOSUB 21400:IF ST$(0)<>LEFT$(CL$(CL)+SPACE$(20),20) THEN PRINT TAB(15)"Possible error:  the class data you have loaded":PRINT TAB(15)"was stored with the name "ST$(0)
  84. 6350  LOCATE 8,15:PRINT"The data loaded had"NUMST"students, and"NUMAC"activities.":LOCATE 10,15:IF NUMAC>0 THEN PRINT"The latest activity entered was #"NUMAC":  "AC$(NUMAC)
  85. 6360  M$="save this in place of the existing class data":GOSUB 21250:IF YES THEN GOSUB 22300 ELSE GOSUB 21210
  86. 6370  GOTO 6000
  87. 6500  IF PR THEN PR=FALSE:SWAP P1$,P2$
  88. 6510  GOTO 7000
  89. 6600  IF NOT PR THEN PR=TRUE:SWAP P1$,P2$
  90. 6610  GOTO 7000
  91. 7000  T$=P1$+"Menu":NUMCH=8
  92. 7010  T$(1)=P1$+"Class Averages":T$(2)=P1$+"a Student's Grades":T$(3)=P1$+"Results of an Activity":T$(4)=P1$+"Condensed Results of All Activities of a Class":T$(5)=P1$+"Details of All Activities of a Class"
  93. 7020  T$(6)=P1$+"a Class Roster & ID Codes":T$(7)=P1$+"Class Averages & Letter Grade Equivalents":T$(8)="Weekly Class Roster":T$(0)="Return to Main Menu":GOSUB 21000:CH1=CH:ON CH GOTO 7200,7300,7400,7500,7600,7700,7800,8000,500
  94. 7200  GOSUB 20260:IF AB THEN 7000 ELSE GOSUB 27000:IF AB THEN 7000 ELSE IF NOT AVGS THEN GOSUB 26500
  95. 7210  GOSUB 27500:IF AB THEN 7000 ELSE PRINT#1,FNC$("Student Averages:"):PRINT#1,:LIN=LIN+2:FOR A=1 TO NUMST:ST=I(A):GOSUB 29500:PRINT#1,USING SPACE$(13)+FMT1$+SPACE$(15);A;A$;
  96. 7220  IF GR(ST,0)<0 THEN PRINT#1,"No Grade" ELSE PRINT#1,USING"####.# %";GR(ST,0)/100
  97. 7230  GOSUB 27600:IF AB THEN 7240 ELSE NEXT:IF GR(0,0)>=0 THEN PRINT#1,:GOSUB 27600:PRINT#1,USING SPACE$(27)+"Class Average:####.## %";GR(0,0)/100:GOSUB 27600
  98. 7240  GOSUB 27700:GOTO 7000
  99. 7300  GOSUB 20250:IF AB THEN 7000 ELSE CLS:LOCATE 8,20:PRINT"You May "P1$"Grades of:":PRINT:PRINT TAB(25)"1) One Student":PRINT TAB(25)"2) All Students":PRINT:PRINT TAB(20)"Your Choice (or <ESC> to Cancel):";
  100. 7305  OK$="12"+ESC$:GOSUB 20200:IF CHAR=1 THEN GOSUB 20400:IF AB THEN 7000 ELSE FI=ST:LA=ST ELSE IF CHAR=2 THEN FI=1:LA=NUMST ELSE 7000
  101. 7310  GOSUB 27500:IF AB THEN 7000 ELSE FOR ST=FI TO LA:PRINT#1,SPACE$(12-10*(ID$(ST)=SPACE$(12)))"Student Summary for:  "ST$(ST)SPACE$(4)ID$(ST):F$=SPACE$(4)+FMT1$+SPACE$(5)+FMT2$+SPACE$(4)+FMT2$+" / "+FMT2$+SPACE$(3):PRINT#1,
  102. 7320  PRINT#1,USING SPACE$(9)+MID$(F$,10);"Activity";"Weight";"Grade";"Total";:PRINT#1,"Percent":PRINT#1,USING SPACE$(9)+MID$(F$,10,42);STRING$(8,"-");STRING$(6,"-");STRING$(5,"-");:PRINT#1,SPACE$(3)STRING$(5,"-")SPACE$(4)STRING$(7,"-"):LIN=LIN+4
  103. 7330  X=0:Y=0:FOR AC=1 TO NUMAC:PRINT#1,USING F$;AC;AC$(AC);FNM$(WT(AC));FNM$(GR(ST,AC));FNM$(GR(0,AC));
  104. 7340  IF GR(ST,AC)<0 THEN PRINT#1," ----" ELSE Z=GR(ST,AC)/GR(0,AC):X=X+Z*WT(AC):Y=Y+WT(AC):PRINT#1,USING"###.# %";Z*100
  105. 7350  GOSUB 27600:IF AB THEN 7370 ELSE NEXT:PRINT#1,:GOSUB 27600:PRINT#1,SPACE$(27)"Current Average: ";:IF Y>0 THEN PRINT#1,USING"###.# %";X/Y*100 ELSE PRINT#1,"No Grade":GOSUB 27600
  106. 7360  IF ST<LA THEN GOSUB 27800:GOSUB 27570:NEXT
  107. 7370  GOSUB 27700:GOTO 7000
  108. 7400  GOSUB 20260:IF AB THEN 7000 ELSE GOSUB 20450:IF AB THEN 7000 ELSE GOSUB 27000:IF AB THEN 7000
  109. 7410  F$=SPACE$(7)+FMT1$+SPACE$(10)+FMT2$+SPACE$(13):GOSUB 27500:IF AB THEN 7000 ELSE PRINT#1,USING SPACE$(8)+"Activity"+FMT1$+SPACE$(4)+"Total: "+FMT2$+" Weight: "+FMT2$;AC;AC$(AC);FNM$(GR(0,AC));FNM$(WT(AC)):PRINT#1,
  110. 7420  PRINT#1,USING SPACE$(11)+MID$(F$,12);"Student";"Grade";:PRINT#1,"Percent":PRINT#1,USING SPACE$(11)+MID$(F$,12);"-------";"------";:PRINT#1,"-------":LIN=LIN+4
  111. 7430  X=0:Y=0:FOR A=1 TO NUMST:ST=I(A):GOSUB 29500:Z=GR(ST,AC)/GR(0,AC):PRINT#1,USING F$;A;A$;FNM$(GR(ST,AC));:IF Z<0 THEN PRINT#1," ----" ELSE X=X+Z:Y=Y+1:PRINT#1,USING"###.# %";Z*100
  112. 7440  GOSUB 27600:IF AB THEN 7450 ELSE NEXT:PRINT#1,:IF Y>0 THEN PRINT#1,USING SPACE$(27)+"Class Average:####.## %";X/Y*100
  113. 7450  GOSUB 27600:GOSUB 27700:GOTO 7000
  114. 7500  GOSUB 20260:IF AB THEN 7000
  115. 7510  W=10:IF NUMAC<=W THEN AC=1 ELSE D=1:M2$="printed first, ":GOSUB 20460:IF AB THEN 7000
  116. 7520  FI=AC:LA=AC+W-1:IF LA>NUMAC THEN LA=NUMAC
  117. 7530  GOSUB 27000:IF AB THEN 7000 ELSE GOSUB 27500:IF AB THEN 7000
  118. 7540  PRINT#1,FNC$("Table of Students' Percentages in Each Activity:"):PRINT#1,:SP=2*(W+FI-LA):PRINT#1,SPACE$(SP+14)"Activity:";:FOR A=FI TO LA:PRINT#1,USING" ###";A;:NEXT:PRINT#1,"  Average":PRINT#1,SPACE$(SP+14)STRING$(9,"=");:FOR A=FI TO LA
  119. 7550  PRINT#1,"  ==";:NEXT:PRINT#1,"  =======":LIN=LIN+4:F$=SPACE$(SP-1)+"###:\"+SPACE$(18)+"\":Z1=0:Z2=0:FOR A=1 TO NUMST:X=0:Y=0:ST=I(A):GOSUB 29500:PRINT#1,USING F$;A;A$;:FOR AC=1 TO FI-1:IF GR(ST,AC)>=0 THEN X=X+GR(ST,AC)/GR(0,AC)*WT(AC):Y=Y+WT(AC)
  120. 7560  NEXT:FOR AC=FI TO LA:IF GR(ST,AC)<0 THEN PRINT#1,"  --"; ELSE Z=GR(ST,AC)/GR(0,AC):X=X+Z*WT(AC):Y=Y+WT(AC):PRINT#1,USING"####";Z*100;
  121. 7570  NEXT:IF Y>0 THEN PRINT#1,USING" ####.# %";X/Y*100:Z1=Z1+X/Y:Z2=Z2+1 ELSE PRINT#1,"   ----"
  122. 7580  GOSUB 27600:IF AB THEN 7590 ELSE NEXT:PRINT#1,:GOSUB 27600:IF Z2>0 THEN PRINT#1,USING SPACE$(WID\2-13)+"Class Average:####.## %";Z1/Z2*100:GOSUB 27600
  123. 7590  GOSUB 27700:GOTO 7000
  124. 7600  GOSUB 20260:IF AB THEN 7000
  125. 7610  GOSUB 27500:IF AB THEN 7000 ELSE PRINT#1,FNC$("Summary of Activities:"):PRINT#1,:F$=SPACE$(7)+FMT1$+SPACE$(5)+FMT2$+SPACE$(5)+FMT2$+SPACE$(5)+"###.# %"
  126. 7620  PRINT#1,SPACE$(13)"Activity"SPACE$(17)"Total"SPACE$(6)"Weight"SPACE$(5)"% Weight":PRINT#1,SPACE$(13)STRING$(8,"-")SPACE$(17)"-----"SPACE$(6)"------"SPACE$(5)STRING$(8,"-"):LIN=LIN+4
  127. 7630  X=9.9999E-05:FOR AC=1 TO NUMAC:X=X+WT(AC):NEXT:FOR AC=1 TO NUMAC:PRINT#1,USING F$;AC;AC$(AC);FNM$(GR(0,AC));FNM$(WT(AC));WT(AC)/X*100:GOSUB 27600:IF AB THEN 7650
  128. 7640  NEXT:PRINT#1,SPACE$(49)"------"SPACE$(5)STRING$(8,"-"):GOSUB 27600:PRINT#1,USING SPACE$(22)+"Weight of All Activities:#####.##"+SPACE$(5)+"100.0 %";X/100:GOSUB 27600
  129. 7650  GOSUB 27700:GOTO 7000
  130. 7700  GOSUB 20250:IF AB THEN 7000 ELSE GOSUB 27000:IF AB THEN 7000
  131. 7710  GOSUB 27500:IF AB THEN 7000 ELSE PRINT#1,FNC$("Class Roster:"):PRINT#1,:PRINT#1,SPACE$(20)"Name"SPACE$(26)"ID Code":PRINT#1,SPACE$(20)"----"SPACE$(26)STRING$(7,"-"):LIN=LIN+4
  132. 7720  FOR A=1 TO NUMST:ST=I(A):GOSUB 29500:PRINT#1,USING SPACE$(14)+FMT1$+SPACE$(8)+"\"+SPACE$(10)+"\";A;A$;ID$(ST):GOSUB 27600:IF AB THEN 7730 ELSE NEXT
  133. 7730  GOSUB 27700:GOTO 7000
  134. 7800  GOSUB 20260:IF AB THEN 7000 ELSE CLS:M$=T$(CH1):GOSUB 21450:GOSUB 21500:COLOR 15,0:LOCATE 4,21:PRINT" Category ":LOCATE 4,44:PRINT" Min. Percent ":COLOR 7,0
  135. 7810  F$="###. [\"+SPACE$(8)+"\]"+SPACE$(15)+"["+FMT2$+"]":FOR A=NUMLG+1 TO MAXLG:LG(A)=0:NEXT:OKEX$=ESC$+FIL$+FKEY2$+REGEX$
  136. 7815  FLIN=1:CURR=1:LEFSIDE=TRUE:LLIN=WSIZ:IF LLIN>MAXLG THEN LLIN=MAXLG
  137. 7820  FOR A=FLIN TO LLIN:LOCATE WTOP+A-FLIN,WLEF:PRINT USING F$;A;LG$(A);FNM$(LG(A)):NEXT:LOCATE 22,8:PRINT"Are these the correct letter grade categories?";:GOSUB 20020:IF YES THEN 7920
  138. 7830  LOCATE 2,11:PRINT"You may edit the letter grade categories before continuing.":GOSUB 21550:LOCATE 22,26:PRINT"<F1> to permanently save these categories,"SPACE$(10):PRINT TAB(26)"<F2> to proceed without saving them, <ESC> to cancel."
  139. 7840  OK$="":IF LEFSIDE THEN LOCATE WTOP+CURR-FLIN,21:IN$=LG$(CURR):ILEN=10:GOSUB 20100:LG$(CURR)=IN$ ELSE LOCATE WTOP+CURR-FLIN,48:X=LG(CURR):GOSUB 20050
  140. 7850  IF NOT LEFSIDE THEN LG(CURR)=X:IF X>LG(CURR+(CURR>1)) OR X<LG(CURR-(CURR<MAXLG)) THEN M$="Must be in descending order":GOSUB 21200:GOTO 7840
  141. 7860  IF CHANGED AND CURR>NUMLG THEN NUMLG=CURR
  142. 7870  IF EX$=RET$ THEN CURR=CURR+1:LEFSIDE=TRUE ELSE IF EX$=DNARR$ THEN CURR=CURR+1 ELSE IF EX$=UPARR$ THEN CURR=CURR-1 ELSE IF EX$=TAB$ THEN LEFSIDE=NOT LEFSIDE:IF LEFSIDE THEN CURR=CURR+1
  143. 7880  IF EX$=ESC$ THEN 7000
  144. 7890  IF CURR<1 THEN CURR=1 ELSE IF CURR>MAXLG THEN CURR=MAXLG
  145. 7900  IF EX$<>FKEY1$ AND EX$<>FKEY2$ THEN 7840
  146. 7910  IF LG(MAXLG)<>0 THEN M$="The last minimum must be 0":GOSUB 21200:GOTO 7840 ELSE IF EX$=FKEY1$ THEN GOSUB 22510
  147. 7920  GOSUB 27000:IF AB THEN 7000 ELSE IF NOT AVGS THEN GOSUB 26500
  148. 7930  GOSUB 27500:IF AB THEN 7000 ELSE PRINT#1,FNC$("Student Averages and Letter Grade Equivalents:"):PRINT#1,:LIN=LIN+2:FOR A=1 TO NUMST:ST=I(A):GOSUB 29500:PRINT#1,USING SPACE$(11)+FMT1$+SPACE$(10);A;A$;
  149. 7940  IF GR(ST,0)<0 THEN PRINT#1,"No Grade" ELSE PRINT#1,USING"####.# %";GR(ST,0)/100;:B=1:WHILE LG(B)>GR(ST,0)+5:B=B+1:WEND:PRINT#1,SPACE$(5)LG$(B)
  150. 7950  GOSUB 27600:IF AB THEN 7960 ELSE NEXT:IF GR(0,0)>=0 THEN PRINT#1,:GOSUB 27600:PRINT#1,USING SPACE$(27)+"Class Average:####.## %";GR(0,0)/100:GOSUB 27600
  151. 7960  GOSUB 27700:GOTO 7000
  152. 8000  REM
  153. 8010  REM - Additional routine added by Carl Stoots, Inc.
  154. 8020  REM - Sorts by last name and prints special weekly roster
  155. 8030  REM
  156. 8041  GOSUB 20250 : IF AB THEN 7000 ELSE GOSUB 27000 : IF AB THEN 7000
  157. 8042  GOSUB 27500 : IF AB THEN 7000 ELSE PRINT#1,FNC$("Weekly Class Roster:")
  158. 8045   REM OPEN PRNAM$ FOR OUTPUT AS #1
  159. 8047   REM PRINT #1,FNC$("Class: "+CL$(CL)) : PRINT #1,
  160. 8050  PRINT#1,:PRINT#1,SPACE$(10);CHR$(27);CHR$(45);CHR$(1);TAB(17);"Name";TAB(39);"Mon   Tue   Wed   Thu   Fri  ";CHR$(27);CHR$(45);CHR$(0):LIN=LIN+4
  161. 8058  FOR A=1 TO NUMST : ST=I(A) : GOSUB 29500
  162. 8060  PRINT#1,USING SPACE$(10)+CHR$(27)+CHR$(45)+CHR$(1)+"##.  \                  \|     |     |     |     |     |"+CHR$(27)+CHR$(45)+CHR$(0);A;A$
  163. 8070  GOSUB 27600 : IF AB THEN 7730 ELSE NEXT
  164. 8075  PRINT #1,CHR$(27);CHR$(45);CHR$(0)
  165. 8080  GOSUB 27700 : GOTO 7000
  166. 10000  CLS:LOCATE 3:M$=T$(CH):GOSUB 21450:LOCATE 10,17:PRINT"Please insert a different data disk in drive "DDRIVE$", and":PRINT TAB(17)"press <ENTER> to continue:":LOCATE 15,17:PRINT"(Or press <ESC> to cancel and return to the menu)"
  167. 10010  LOCATE 11,43:OK$=ESC$+RET$:GOSUB 20200:IF CHAR=1 THEN 500 ELSE CLS:GOTO 41050
  168. 11000  CLS:M$=T$(CH):GOSUB 21450:OKEX$=ESC$+FIL$+REGEX$:GOSUB 21550:F$=" \"+SPACE$(40)+"\"
  169. 11020  A$=F$+"[\"+SPACE$(18)+"\]":LOCATE 4,1:PRINT USING A$;"Data drive (A: to D:), or pathname";DDRIVE$:PRINT:PRINT USING A$;"Backup drive or pathname";BDRIVE$:PRINT:PRINT USING F$+"[!]";"Printer Number (1, 2, or 3)";RIGHT$(PRNAM$,2)
  170. 11030  PRINT:PRINT USING F$;"Codes to initialize printer (if any)";:FOR A=1 TO 13 STEP 3:PRINT USING"[\ \] ";MID$(PRCODE$+SPACE$(15),A,3);:NEXT:PRINT
  171. 11090  CURR=1:MAX=4
  172. 11100  LOCATE 2*CURR+2,45:ON CURR GOSUB 11200,11210,11220,11240
  173. 11120  IF EX$=RET$ OR EX$=DNARR$ OR EX$=TAB$ THEN CURR=CURR+1 ELSE IF EX$=UPARR$ THEN CURR=CURR-1
  174. 11130  IF EX$=ESC$ THEN M$="abandon all changes":GOSUB 21250:IF YES THEN 41000
  175. 11140  IF CURR<1 THEN CURR=MAX ELSE IF CURR>MAX THEN 11160
  176. 11150  IF EX$<>FKEY1$ THEN 11100
  177. 11160  GOSUB 22350:GOSUB 22500:GOTO 500
  178. 11200  IN$=DDRIVE$:GOSUB 29300:DDRIVE$=A$:RETURN
  179. 11210  IN$=BDRIVE$:GOSUB 29300:BDRIVE$=A$:RETURN
  180. 11220  OK$="123":IN$=RIGHT$(PRNAM$,2):ILEN=1:GOSUB 20100:PRNAM$="LPT"+IN$+":":RETURN
  181. 11240  POSN=1:OK$="0123456789 ":B$=LEFT$(PRCODE$+SPACE$(15),15)
  182. 11250  LOCATE,43+2*POSN:IN$=MID$(B$,POSN,3)
  183. 11260  ILEN=3:GOSUB 20100:A=VAL(IN$):IF A>255 THEN PRINT MID$(B$,POSN,3);:BEEP:GOTO 11250 ELSE MID$(B$,POSN,3)=IN$
  184. 11270  IF EX$=TAB$ AND POSN<13 THEN POSN=POSN+3:GOTO 11250 ELSE WHILE RIGHT$(B$,3)="   ":B$=LEFT$(B$,LEN(B$)-3):WEND:PRCODE$=B$:RETURN
  185. 19000  CLS:LOCATE 10,10:PRINT"Do you really wish to end the session now?";:GOSUB 20020:IF NO THEN 500
  186. 19010  CLS:LOCATE 8,20:PRINT"You may remove the disks now.":PRINT:PRINT TAB(20)"Press <ENTER> to return to DOS:";:OK$=RET$:GOSUB 20200:CLS:SYSTEM
  187. 20000  GOSUB 21100:PRINT TAB(23)"--- Press any key to continue ---";:WHILE INKEY$<>"":WEND:WHILE INKEY$="":WEND:GOSUB 21100:RETURN
  188. 20020  PRINT" (Y/N):";:OK$=("YN"):GOSUB 20200:PRINT IN$:IF IN$="Y" THEN YES=TRUE ELSE YES=FALSE
  189. 20030  NO=NOT YES:RETURN
  190. 20050  GOSUB 20060:IF NOT CHANGED THEN RETURN ELSE IF X<0 THEN GOSUB 20080:GOTO 20050 ELSE RETURN
  191. 20060  Y=X:ILEN=6:OK$=NUMS$+"Ii":IF X<0 THEN IN$="I     " ELSE IN$=MID$(STR$(X/100)+SPACE$(5),2,6)
  192. 20065  GOSUB 20100:IF NOT CHANGED THEN RETURN ELSE X=INT(VAL(IN$)*100+0.5):IF X<0 OR X>30000 THEN GOSUB 20080:GOTO 20060 ELSE IF X=0 THEN IF INSTR(IN$,"I") OR INSTR(IN$,"i") THEN X=-1
  193. 20070  PRINT FNM$(X);:LOCATE,BEGCX:RETURN
  194. 20080  M$="Must be between 0 and 300":GOSUB 21200:X=Y:PRINT FNM$(X);:LOCATE,BEGCX:RETURN
  195. 20100  CHANGED=FALSE:CY=CSRLIN:CX=POS(0):BEGCX=CX:IN$=LEFT$(IN$+SPACE$(ILEN),ILEN):LOCATE CY,BEGCX,1
  196. 20110  A$="":WHILE A$="":A$=INKEY$:WEND:IF A$=RET$ OR INSTR(OKEX$,A$) MOD 2 THEN EX$=A$:LOCATE CY,BEGCX,0:WHILE INKEY$<>"":WEND:RETURN
  197. 20120  IF A$=LEFARR$ OR A$=BACKSP$ THEN IF CX>BEGCX THEN CX=CX-1:LOCATE CY,CX:IF A$=BACKSP$ THEN PRINT" ";:LOCATE CY,CX:MID$(IN$,CX-BEGCX+1,1)=" ":GOTO 20110 ELSE 20110 ELSE 20110
  198. 20130  IF A$=RIGARR$ THEN IF CX-BEGCX<ILEN THEN CX=CX+1:LOCATE CY,CX:GOTO 20110 ELSE 20110
  199. 20140  IF (OK$<>"" AND INSTR(OK$,A$)=0) OR A$<" " OR A$>CHR$(126) OR A$=CHR$(34) OR CX-BEGCX>=ILEN THEN 20110
  200. 20150  CHANGED=TRUE:PRINT A$;:CX=CX+1:MID$(IN$,CX-BEGCX,1)=A$:GOTO 20110
  201. 20200  LOCATE,,1:IN$="":WHILE IN$="":IN$=INKEY$:WEND:IF IN$>="a" AND IN$<="z" THEN IN$=CHR$(ASC(IN$)-32)
  202. 20210  IF OK$<>"" THEN CHAR=INSTR(OK$,IN$) ELSE CHAR=1
  203. 20215  IF CHAR THEN LOCATE,,0:RETURN ELSE 20200
  204. 20220  IF MORE THEN PRINT"Press <ENTER> to see more of the list, or"
  205. 20230  PRINT"Type the number of the "M$" you want "M2$"and press <ENTER>:[   ]";:A=POS(0):PRINT::PRINT"(Or press <ESC> to return to the menu)";:LOCATE CSRLIN-1,A-4:IN$="   "
  206. 20240  AB=FALSE:ILEN=3:OK$=NUMS$:OKEX$=ESC$:GOSUB 20100:IF EX$=ESC$ THEN CH=0:AB=TRUE:PRINT:PRINT:RETURN ELSE CH=VAL(IN$):IF CH=0 AND MORE THEN RETURN ELSE IF CH<1 OR CH>MAX THEN BEEP:GOTO 20240 ELSE PRINT:PRINT:RETURN
  207. 20250  GOSUB 20300:IF AB THEN RETURN ELSE GOSUB 22200:IF NUMST=0 THEN CLS:LOCATE 10,26:PRINT"This Class Has No Students.":GOSUB 20000:AB=TRUE:RETURN ELSE RETURN
  208. 20260  GOSUB 20250:IF AB THEN RETURN ELSE IF NUMAC=0 THEN CLS:LOCATE 10,25:PRINT"This Class Has No Activities.":GOSUB 20000:AB=TRUE:RETURN ELSE RETURN
  209. 20300  CLS:IF NUMCL<=0 THEN LOCATE 10,25:PRINT"No Classes Have Been Entered.":GOSUB 20000:AB=TRUE:RETURN ELSE AB=FALSE:M$=T$(CH):GOSUB 21450:PRINT:PRINT:PRINT TAB(26)"Which Class Would You Like?":PRINT
  210. 20310  OK$=LEFT$(CLNUM$,NUMCL)+ESC$:FOR A=1 TO NUMCL:PRINT TAB(28)MID$(OK$,A,1)".  "CL$(A):NEXT
  211. 20320  PRINT:PRINT TAB(20)"Type the number of the class you want:":PRINT TAB(20)"(or press <ESC> to return to the menu) ";:LOCATE CSRLIN-1:GOSUB 20200:PRINT IN$:PRINT:IF CHAR=NUMCL+1 THEN AB=TRUE:RETURN ELSE CL=CHAR:RETURN
  212. 20400  D=1
  213. 20410  CLS:GOSUB 21400:C=D:WHILE D<=NUMST AND D-C<30:LOCATE(D-1)MOD 15+3,(((D-1)MOD 30)\15)*40+1:PRINT USING FMT1$;D;ST$(D):D=D+1:WEND:LOCATE 21,1:M$="student":MAX=NUMST:MORE=D<=NUMST:GOSUB 20220:IF AB THEN RETURN
  214. 20420  IF CH=0 THEN 20410 ELSE ST=CH:RETURN
  215. 20450  D=1:M2$=""
  216. 20459  'Alt. entry
  217. 20460  CLS:GOSUB 21400:C=D:WHILE D<=NUMAC AND D-C<30:LOCATE(D-1)MOD 15+3,(((D-1)MOD 30)\15)*40+1:PRINT USING FMT1$;D;AC$(D):D=D+1:WEND:LOCATE 21,1:MAX=NUMAC:MORE=D<=NUMAC:M$="activity":GOSUB 20220:IF AB THEN RETURN
  218. 20470  IF CH=0 THEN 20460 ELSE AC=CH:RETURN
  219. 21000  CLS:PRINT TAB(16)"Report Card:  A Grading System for the Teacher":PRINT TAB(12)"IBM PC Version 1.00,  Copyright 1983 by Marc Ringuette":PRINT:PRINT:M$=T$:GOSUB 21450:PRINT:PRINT TAB(28)"You have these choices:":PRINT:PRINT
  220. 21009  'Alt. Entry
  221. 21010  FOR A=1 TO NUMCH:PRINT TAB(15)"<"A"> -- "T$(A):NEXT:PRINT:PRINT TAB(15)"<ESC> -- "T$(0):PRINT:PRINT:PRINT TAB(29)"Your Choice (1 to"STR$(NUMCH)"):";:OK$=ESC$+LEFT$("12345678",NUMCH):GOSUB 20200:PRINT IN$:CH=VAL(IN$):IF CH=0 THEN CH=NUMCH+1
  222. 21090  RETURN
  223. 21100  LOCATE 25,1:PRINT SPACE$(79);:LOCATE 25,1:RETURN
  224. 21200  A=CSRLIN:B=POS(0):BEEP:GOSUB 21100:PRINT"*** "M$".  Press the space bar:";:OK$=" ":GOSUB 20200:GOSUB 21100:LOCATE A,B:RETURN
  225. 21210  M$="Nothing will be changed":GOSUB 21200:RETURN
  226. 21250  A=CSRLIN:B=POS(0):BEEP:M$="Do you really wish to "+M$:GOSUB 21350:LOCATE A,B:RETURN
  227. 21300  A=CSRLIN:B=POS(0):GOSUB 21100:PRINT TAB(10)"*** "M$". ***";:LOCATE A,B:RETURN
  228. 21350  GOSUB 21100:PRINT"*** "M$"? (Y/N):";:OK$="YN":GOSUB 20200:IF IN$="Y" THEN YES=TRUE ELSE YES=FALSE
  229. 21360  NO=NOT YES:GOSUB 21100:RETURN
  230. 21400  PRINT TAB(25)"Class"CL":  "CL$(CL):PRINT:RETURN
  231. 21450  COLOR 15,0:PRINT TAB(39-LEN(M$)/2)M$:COLOR 7,0:RETURN
  232. 21500  LOCATE WTOP-1,WLEF-1:PRINT"KEY";:FOR A=WLEF TO WRIG:PRINT"THEN";:NEXT:PRINT"CLOSE":FOR A=WTOP TO WBOT:LOCATE A,WRIG+1:PRINT"OPEN":NEXT:LOCATE WBOT+1,WRIG+1:PRINT"LOAD";:FOR A=WRIG TO WLEF STEP -1:LOCATE WBOT+1,A:PRINT"THEN":NEXT:LOCATE WBOT+1,WLEF-1:PRINT"SCREEN"
  233. 21520  FOR A=WBOT TO WTOP STEP -1:LOCATE A,WLEF-1:PRINT"OPEN":NEXT:RETURN
  234. 21550  LOCATE 21,15:PRINT"Commands:  Move with Arrow Keys, <TAB>, or <ENTER>;":IF INSTR(OKEX$,INS$) MOD 2 THEN PRINT TAB(26)"<INS> to insert a "M$", <DEL> to delete a "M$";"
  235. 21560  PRINT TAB(26)"<F1> to exit and keep changes";:IF INSTR(OKEX$,ESC$) MOD 2 THEN PRINT"; <ESC> to cancel.";:RETURN ELSE PRINT".";:RETURN
  236. 21570  LOCATE 4,A:PRINT M$;:LOCATE 4,B:PRINT M2$:RETURN
  237. 21600  CALL SCROLLUP!:RETURN
  238. 21610  CALL SCROLLDN!:RETURN
  239. 22000  OPEN "R",1,DRIVE$+"GRAD"+MID$(CLNUM$,CL,1)+".DAT",RECL:FIELD 1,20 AS B1$,12 AS B2$,RECL-32 AS B3$:RETURN
  240. 22010  GET 1,ST+1:ST$(ST)=B1$:ID$(ST)=B2$:FOR A=1 TO NUMAC:GR(ST,A)=CVI(MID$(B3$,2*A-1,2)):NEXT:RETURN
  241. 22020  LSET B1$=ST$(ST):LSET B2$=ID$(ST):FOR A=1 TO NUMAC:MID$(B3$,2*A-1,2)=MKI$(GR(ST,A)):NEXT:PUT 1,ST+1:RETURN
  242. 22030  GOSUB 22000:GOSUB 22020:GOSUB 22090:RETURN
  243. 22050  OPEN "I",1,DRIVE$+"INFO"+MID$(CLNUM$,CL,1)+".DAT":RETURN
  244. 22060  OPEN "O",1,DRIVE$+"INFO"+MID$(CLNUM$,CL,1)+".DAT":RETURN
  245. 22090  CLOSE 1:RETURN
  246. 22100  A$=MID$(CLNUM$,CL,1)+".DAT":KILL DRIVE$+"GRAD"+A$:KILL DRIVE$+"INFO"+A$:RETURN
  247. 22110  A$=DRIVE$+"GRAD"+MID$(CLNUM$,A,1)+".DAT":B$=DRIVE$+"GRAD"+MID$(CLNUM$,B,1)+".DAT":C$=DRIVE$+"GRADXX.DAT":NAME A$ AS C$:NAME B$ AS A$:NAME C$ AS B$
  248. 22115  A$=DRIVE$+"INFO"+MID$(CLNUM$,A,1)+".DAT":B$=DRIVE$+"INFO"+MID$(CLNUM$,B,1)+".DAT":C$=DRIVE$+"INFOXX.DAT":NAME A$ AS C$:NAME B$ AS A$:NAME C$ AS B$:RETURN
  249. 22120  NAME DRIVE$+"GRAD"+MID$(CLNUM$,B,1)+".DAT"AS DRIVE$+"GRAD"+MID$(CLNUM$,A,1)+".DAT":NAME DRIVE$+"INFO"+MID$(CLNUM$,B,1)+".DAT"AS DRIVE$+"INFO"+MID$(CLNUM$,A,1)+".DAT":RETURN
  250. 22200  IF LOADED=CL THEN RETURN ELSE DRIVE$=DDRIVE$
  251. 22209  'Alt. Entry
  252. 22210  PRINT:PRINT TAB(25)"--- Reading Class Data ---":GOSUB 22000:ST=0:GOSUB 22010:NUMST=CVI(MID$(ID$(0),1,2)):NUMAC=CVI(MID$(ID$(0),3,2)):FOR ST=0 TO NUMST:GOSUB 22010:NEXT:GOSUB 22090
  253. 22220  GOSUB 22050:FOR A=1 TO NUMAC:INPUT#1,AC$(A),WT(A):NEXT:GOSUB 22090:LOADED=CL:RETURN
  254. 22300  DRIVE$=DDRIVE$
  255. 22309  'Alt. Entry
  256. 22310  CLS:LOCATE 10,25:PRINT"--- Recording Class Data ---":LOADED=CL:GOSUB 22000:ID$(0)=MKI$(NUMST)+MKI$(NUMAC):ST$(0)=CL$(CL):FOR ST=0 TO NUMST:GOSUB 22020:NEXT:GOSUB 22090
  257. 22319  'Alt. Entry
  258. 22320  GOSUB 22060:FOR A=1 TO NUMAC:WRITE#1,AC$(A),WT(A):NEXT:GOSUB 22090:RETURN
  259. 22350  CLS:LOCATE 10,23::PRINT"--- Recording Modified Data ---":RETURN
  260. 22500  OPEN"o",1,"WHICHDSK.DAT":WRITE#1,DDRIVE$,BDRIVE$:CLOSE#1
  261. 22509  'Alt. Entry
  262. 22510  OPEN"o",1,DDRIVE$+"SYSINFO.DAT":WRITE#1,PRNAM$,PRCODE$,NUMCL:FOR A=1 TO NUMCL:WRITE#1,CL$(A):NEXT:WRITE#1,NUMLG:FOR A=1 TO NUMLG:WRITE#1,LG$(A),LG(A):NEXT:CLOSE#1:RETURN
  263. 22600  M$="save":GOSUB 29050
  264. 22610  IF CHAR=2 THEN DRIVE$=BDRIVE$:GOSUB 22310:GOSUB 29100
  265. 22620  RETURN
  266. 22700  CLS:LOCATE 9,20:PRINT"Would you like to save a backup copy":PRINT TAB(20)"of this class' data now?";:GOSUB 20020:IF YES THEN GOSUB 22600
  267. 22710  RETURN
  268. 25000  F$="\"+SPACE$(30)+"\ [\":F2$="    \]":CLS:LOCATE 2,20:PRINT"Class: "CL$(CL)TAB(50)"Activity:"AC:LOCATE 5,10:PRINT USING F$+SPACE$(14)+F2$;"Activity Name";AC$(AC):LOCATE 7,10:PRINT USING F$+F2$;"Total (.01 to 300)";FNM$(GR(0,AC))
  269. 25010  LOCATE 9,10:PRINT USING F$+F2$;"Weight (0 to 300)";FNM$(WT(AC)):OKEX$=ESC$+FIL$+REGEX$
  270. 25015  GOSUB 21550
  271. 25020  LOCATE 5,44:IN$=AC$(AC):ILEN=20:OK$="":GOSUB 20100:AC$(AC)=IN$:IF EX$=ESC$ OR EX$=FKEY1$ THEN 25050 ELSE IF EX$=UPARR$ THEN 25040 ELSE 25030
  272. 25030  LOCATE 7,44:X=GR(0,AC):GOSUB 20050:GR(0,AC)=X:IF X<1 THEN BEEP:GOTO 25030 ELSE IF EX$=ESC$ OR EX$=FKEY1$ THEN 25050 ELSE IF EX$=UPARR$ THEN 25020 ELSE 25040
  273. 25040  LOCATE 9,44:X=WT(AC):GOSUB 20050:WT(AC)=X:IF EX$=UPARR$ THEN 25030
  274. 25050  IF EX$=ESC$ THEN M$="abandon what you have just entered":GOSUB 21250:IF YES THEN AB=TRUE ELSE 25020 ELSE AB=FALSE
  275. 25060  RETURN
  276. 25500  CLS:M$="Edit Grades":GOSUB 21450:PRINT TAB(8)"Activity"AC": "AC$(AC)TAB(48)"Total:"GR(0,AC)/100"    Weight:"WT(AC)/100:GOSUB 21500:COLOR 15,0:LOCATE 4,24:PRINT" Student ":LOCATE 4,49:PRINT" Grade ":COLOR 7,0
  277. 25519  'Alt. Entry
  278. 25520  OKEX$=ESC$+FIL$+REGEX$:GOSUB 21550:F$=FMT1$+SPACE$(8)+"[":FLIN=1:CURR=1:LLIN=WSIZ:IF LLIN>NUMST THEN LLIN=NUMST
  279. 25530  FOR A=FLIN TO LLIN:LOCATE WTOP+A-FLIN,WLEF:GOSUB 29020:NEXT
  280. 25600  LOCATE WTOP+CURR-FLIN,50:X=GR(CURR,AC):GOSUB 20060:IF CHANGED THEN IF X<=3*GR(0,AC) THEN GR(CURR,AC)=X ELSE M$="Too large - total is "+FNM$(GR(0,AC)):GOSUB 21200:PRINT FNM$(GR(CURR,AC)):GOTO 25600
  281. 25620  IF EX$=RET$ OR EX$=TAB$ OR EX$=DNARR$ THEN IF CURR<NUMST THEN CURR=CURR+1:IF CURR>LLIN THEN GOSUB 21600:FLIN=FLIN+1:LLIN=CURR:LOCATE WBOT,WLEF:A=LLIN:GOSUB 29020 ELSE ELSE BEEP:GOSUB 29400:IF YES THEN 25700
  282. 25630  IF EX$=UPARR$ THEN IF CURR>1 THEN CURR=CURR-1:IF CURR<FLIN THEN GOSUB 21610:FLIN=CURR:LLIN=LLIN-1:LOCATE WTOP,WLEF:A=FLIN:GOSUB 29020
  283. 25680  IF EX$=ESC$ THEN M$="abandon all changes":GOSUB 21250:IF YES THEN AB=TRUE:RETURN
  284. 25690  IF EX$<>FKEY1$ THEN 25600
  285. 25700  AB=FALSE:RETURN
  286. 26000  CLS:LOCATE 10,20:PRINT"Searching for last names:";:FOR A=NUMST TO 1 STEP -1:LOCATE 10,47:PRINT USING"###";A:B=LEN(ST$(A)):WHILE MID$(ST$(A),B,1)=" " AND B>1:B=B-1:WEND:WHILE MID$(ST$(A),B,1)<>" "AND B>1:B=B-1:WEND:IF MID$(ST$(A),B,1)=" "THEN B=B+1
  287. 26010  J(A)=B:NEXT:NAMES=TRUE:IDS=FALSE:AVGS=FALSE:GOSUB 26200:RETURN
  288. 26050  FOR A=1 TO NUMST:J(A)=1:NEXT:NAMES=TRUE:IDS=FALSE:AVGS=FALSE:GOSUB 26200:RETURN
  289. 26080  NAMES=FALSE:IDS=TRUE:AVGS=FALSE:GOSUB 26200:RETURN
  290. 26100  GOSUB 26500:NAMES=FALSE:IDS=FALSE:AVGS=TRUE:GOSUB 26200:RETURN
  291. 26150  GR(0,0)=NUMST*100:FOR A=1 TO NUMST:GR(A,0)=A*100:NEXT:AC1=AC:AC=0
  292. 26160  CLS:M$=T$(CH):GOSUB 21450:PRINT TAB(15)"You may reassign student positions in the class,":PRINT TAB(15)"ensuring that all numbers are used once."
  293. 26170  GOSUB 21500:COLOR 15,0:LOCATE 4,24:PRINT" Student ":LOCATE 4,48:PRINT" Position ":COLOR 7,0:GOSUB 25520:IF AB THEN RETURN ELSE FOR A=1 TO NUMST:I(A)=0:NEXT:FOR A=1 TO NUMST:IF GR(A,0)>99 AND GR(A,0)<=NUMST*100 THEN I(GR(A,0)\100)=1
  294. 26180  NEXT:FOR A=1 TO NUMST:IF I(A)=0 THEN M$="Invalid order -- all numbers not included":GOSUB 21200:GOTO 26160 ELSE NEXT
  295. 26190  FOR A=1 TO NUMST:I(GR(A,0)/100)=A:NEXT:AB=FALSE:AC=AC1:RETURN
  296. 26200  CLS:LOCATE 10,34:PRINT"Sorting:":FOR A=1 TO NUMST:I(A)=A:NEXT:S=NUMST:IF S<2 THEN RETURN ELSE IF S=3 THEN S=2
  297. 26210  S=S\3+1:LOCATE 10,43:PRINT USING"###";S:FOR A=1 TO S:FOR B=A TO NUMST-S STEP S:C=B
  298. 26220  D=I(C):E=I(C+S):IF NAMES THEN IF MID$(ST$(D),J(D))+"  "+ST$(D)<=MID$(ST$(E),J(E))+"  "+ST$(E) THEN 26240 ELSE ELSE IF IDS THEN IF ID$(D)+ST$(D)<=ID$(E)+ST$(E) THEN 26240 ELSE ELSE IF GR(D,0)>=GR(E,0) THEN 26240
  299. 26230  I(C)=E:I(C+S)=D:IF C>A THEN C=C-S:GOTO 26220
  300. 26240  NEXT:NEXT:IF S>1 THEN 26210 ELSE RETURN
  301. 26300  CLS:LOCATE 10,30:PRINT"Rearranging order:":LOADED=0:FOR A=1 TO NUMST-1:LOCATE 10,50:PRINT USING"###";NUMST-A:S=I(A)
  302. 26310  IF S>A THEN 26320 ELSE IF S=A THEN 26330 ELSE S=I(S):GOTO 26310
  303. 26320  SWAP ST$(A),ST$(S):SWAP ID$(A),ID$(S):FOR B=1 TO NUMAC:SWAP GR(A,B),GR(S,B):NEXT
  304. 26330  NEXT:LOADED=CL:RETURN
  305. 26500  CLS:LOCATE 8,20:PRINT"Would you like to include all activities":PRINT TAB(20)"in the averages?";:GOSUB 20020:IF YES THEN FOR A=1 TO NUMAC:J(A)=1:NEXT:GOTO 26520
  306. 26510  CLS:PRINT TAB(20)"Choose which to include:":PRINT:FOR A=1 TO NUMAC:PRINT USING FMT1$+SPACE$(10);A;AC$(A);:GOSUB 20020:J(A)=-YES:NEXT
  307. 26520  CLS:LOCATE 11,25:PRINT"Calculating percentages:":Z=0:C=0:FOR A=1 TO NUMST:LOCATE 11,50:PRINT USING"###";NUMST+1-A:X=0:Y=0:FOR B=1 TO NUMAC:IF GR(A,B)>=0 THEN X=X+GR(A,B)/GR(0,B)*WT(B)*J(B):Y=Y+WT(B)*J(B)
  308. 26530  NEXT:IF Y>0 THEN GR(A,0)=X/Y*10000:Z=Z+X/Y:C=C+1 ELSE GR(A,0)=-1
  309. 26540  NEXT:IF C>0 THEN GR(0,0)=Z/C*10000 ELSE GR(0,0)=0
  310. 26550  RETURN
  311. 27000  T$=T$(CH1):NUMCH=8:T$(1)=P1$+"in Normal Order":T$(2)="Sort by Last Names":T$(3)="Sort by First Names":T$(4)="Sort by ID Codes":T$(5)="Sort by Averages":T$(6)="Design Your Own Order"
  312. 27010  T$(7)="Omit Names from Output":T$(8)="Replace Names with ID Codes":T$(0)="Return to "+P1$+"Menu":OMIT=FALSE:CODE=FALSE
  313. 27020  GOSUB 21000:IF CH=NUMCH+1 THEN AB=TRUE:RETURN ELSE IF CH=7 THEN OMIT=TRUE:NUMCH=6:GOTO 27020 ELSE IF CH=8 THEN CODE=TRUE:NUMCH=6:GOTO 27020 ELSE AB=FALSE:ON CH GOSUB 27100,26000,26050,26080,26100,26150:T$(CH)=T$:RETURN
  314. 27100  FOR A=1 TO NUMST:I(A)=A:NEXT:NAMES=FALSE:IDS=FALSE:AVGS=FALSE:RETURN
  315. 27500  CLS:IF NOT PR THEN 27550 ELSE LOCATE 6,10:PRINT"You may enter the date (or other information), to be included":PRINT TAB(10)"in the printout.  Press <ENTER> when done, or <ESC> to cancel.":PRINT:PRINT" ["HEAD$;:LOCATE,79:PRINT"]":LOCATE 9,3
  316. 27510  IN$=HEAD$:ILEN=76:OK$="":OKEX$=ESC$:GOSUB 20100:HEAD$=IN$:WHILE RIGHT$(HEAD$,1)=" ":HEAD$=LEFT$(HEAD$,LEN(HEAD$)-1):WEND:IF EX$=ESC$ THEN AB=TRUE:RETURN
  317. 27520  LOCATE 12,20:PRINT"Please ensure that the printer is on,":PRINT TAB(20)"and at the top of a page.":LOCATE 15,20:PRINT"Press <ESC> to escape,":PRINT TAB(20)"or any other key to continue:";:OK$="":GOSUB 20200
  318. 27530  IF IN$=ESC$ THEN AB=TRUE:RETURN ELSE CLS:LOCATE 9,30:PRINT"Printing...":LOCATE 11,10:PRINT"(Press <ESC> to cancel printing while in progress)"
  319. 27550  AB=FALSE:IF PR THEN OPEN PRNAM$ FOR OUTPUT AS #1:FOR D=1 TO LEN(PRCODE$) STEP 3:PRINT#1,CHR$(VAL(MID$(PRCODE$,D,3)));:NEXT ELSE OPEN"SCRN:"FOR OUTPUT AS #1
  320. 27569  'Alt. Entry
  321. 27570  PRINT#1,FNC$("Class: "+CL$(CL)):PRINT#1,:LIN=2:IF PR AND HEAD$<>"" THEN PRINT#1,FNC$(HEAD$):PRINT#1,:LIN=4
  322. 27590  RETURN
  323. 27600  AB=INKEY$=ESC$:IF AB THEN WHILE INKEY$<>"":WEND
  324. 27610  LIN=LIN+1:IF NOT PR THEN IF LIN MOD 22=0 THEN GOSUB 20000:CLS:LAST=TRUE ELSE LAST=FALSE ELSE LAST=TRUE
  325. 27620  RETURN
  326. 27700  GOSUB 27800:CLOSE#1:RETURN
  327. 27800  IF PR THEN PRINT#1,CHR$(12);:RETURN ELSE IF NOT LAST THEN GOSUB 20000:CLS:RETURN
  328. 28200  FOR A=1 TO 5:IF A>LEN(A$) THEN PRINT"[   ] "; ELSE PRINT USING"[###] ";ASC(MID$(A$,A));
  329. 29000  ST$(ST)=SPACE$(20):ID$(ST)=SPACE$(12):RETURN
  330. 29010  FOR A=1 TO NUMAC:GR(ST,A)=-1:NEXT:RETURN
  331. 29020  PRINT USING F$;A;ST$(A);:IF GR(A,AC)<0 THEN PRINT"I     ]" ELSE PRINT MID$(STR$(GR(A,AC)/100)+SPACE$(5),2,6)"]"
  332. 29030  RETURN
  333. 29050  CLS:LOCATE 6:GOSUB 21400:PRINT:IF BDRIVE$=DDRIVE$ THEN PRINT TAB(5)"Please remove your regular data disk from drive "DDRIVE$", and"
  334. 29060  PRINT TAB(5)"Ensure that your backup disk is in drive "BDRIVE$"."
  335. 29070  LOCATE 13,10:PRINT"Press <ENTER> to "M$" the backup copy,":PRINT TAB(10)"or press <ESC> to cancel:";:OK$=ESC$+RET$:GOSUB 20200:RETURN
  336. 29100  IF BDRIVE$=DDRIVE$ THEN CLS:LOCATE 10,15:PRINT"Done.  Please re-insert your regular data disk.":GOSUB 20000
  337. 29110  RETURN
  338. 29300  OK$="":ILEN=20:GOSUB 20100:A=20:WHILE A>1 AND MID$(IN$,A,1)=" ":A=A-1:WEND:A$=LEFT$(IN$,A):A=INSTR("abcd",LEFT$(A$,1)):IF A>0 THEN MID$(A$,1,1)=MID$("ABCD",A,1)
  339. 29310  IF INSTR("ABCD",LEFT$(A$,1))=0 OR MID$(A$,2,1)<>":" THEN BEEP:GOTO 29300
  340. 29320  PRINT A$:RETURN
  341. 29400  M$="Are you ready to exit and keep what you have entered":GOSUB 21350:RETURN
  342. 29500  IF OMIT THEN A$="":RETURN ELSE IF CODE THEN A$=ID$(ST):RETURN ELSE A$=ST$(ST):RETURN
  343. 30000  WHILE INKEY$<>"":WEND:ATEMP=A
  344. 30020  IF ERL>40999 AND ERL<41500 THEN RESUME 41500
  345. 30040  IF ERL>21999 AND ERL<23000 THEN M$=" Disk" ELSE IF ERL>27549 AND ERL<27571 THEN M$=" Printer" ELSE M$="n Execution"
  346. 30050  M$="A"+M$+" Error Has Occurred."
  347. 30060  CLS:LOCATE 3:GOSUB 21450:PRINT:PRINT TAB(20)"Error Number:"ERR;TAB(40)"Line Number:"ERL:PRINT
  348. 30070  ER$="":IF ERR=71 THEN ER$="Disk Not Ready" ELSE IF ERR=61 OR ERR=67 THEN ER$="Disk full or bad pathname"ELSE IF ERR=53 THEN ER$="File Not Found"
  349. 30090  IF ER$<>"" THEN PRINT TAB(20)"Error Type: "ER$:PRINT
  350. 30100  NUMCH=4:T$(1)="Continue (If you have fixed the problem)":T$(2)="Re-Start System (Advisable if you haven't fixed it)":T$(3)="Save a Backup Copy of the Current Class Data":T$(4)="Proceed Directly to Main Menu":T$(0)="End Session"
  351. 30110  PRINT:PRINT TAB(28)"You have these choices:":PRINT:PRINT:GOSUB 21010:CLS:ON CH GOTO 30150,30160,30170,30180,30190
  352. 30150  PRINT"Continuing...":A=ATEMP:RESUME
  353. 30160  RUN
  354. 30170  IF LOADED=CL AND LOADED>0 THEN CLOSE#1:GOSUB 22600:RUN ELSE LOCATE 10,25:PRINT"No Class Data is in Memory.":GOSUB 20000:GOTO 30060
  355. 30180  CLOSE#1:RESUME 500
  356. 30190  RESUME 19010
  357. 40000  CLEAR:ON ERROR GOTO 30000:TROFF:SCREEN 0,0,0:WIDTH 80:KEY OFF:KEY 1,"":KEY 2,"":CLS:LOCATE,,0:DEFINT A-W
  358. 40010  MAXST=50:MAXAC=50:MAXCL=15:MAXLG=15
  359. 40020  X=FRE(0):IF X<2500+MAXST*(40+2*MAXAC)+25*MAXAC THEN PRINT"Insufficient memory for program data.":STOP
  360. 40030  IF MAXCL>MAXST OR MAXAC>112 OR MAXLG>15 THEN PRINT"Error: check values at line 40010.":STOP
  361. 40040  RECL=32+2*MAXAC:A=MAXST:B=0:C=0:D=0:WID=80:IF MAXAC>A THEN A=MAXAC
  362. 40050  DIM GR(MAXST,MAXAC),WT(MAXAC),ST$(MAXST),ID$(MAXST),AC$(MAXAC),I(A),J(A),CL$(MAXCL),LG$(MAXLG),LG(MAXLG),T$(8)
  363. 40060  SCROLLUP$=SPACE$(19):SCROLLDN$=SCROLLUP$:A$="55B001B504B10EB612B23FB707B406CD105DCB":FOR A=1 TO 19:MID$(SCROLLUP$,A,1)=CHR$(VAL("&H"+MID$(A$,A*2-1,2))):NEXT
  364. 40070  LSET SCROLLDN$=SCROLLUP$:MID$(SCROLLDN$,15)=CHR$(7)
  365. 40080  DEF SEG:A$="":Y=FRE(""):X=VARPTR(SCROLLUP$):SCROLLUP!=PEEK(X+1)+256*PEEK(X+2):X=VARPTR(SCROLLDN$):SCROLLDN!=PEEK(X+1)+256*PEEK(X+2)
  366. 40090  DEF FNM$(X)=MID$("I     "+STR$(X/100)+SPACE$(5),1-7*(X>-1),6):DEF FNC$(X$)=SPACE$(WID\2-2-LEN(X$)\2)+X$:CLNUM$="123456789ABCDEF":NUMS$="0123456789 .":FMT1$="###.  \"+SPACE$(18)+"\":FMT2$="\    \"
  367. 40100  TRUE=-1:FALSE=0:NUL$=CHR$(0):FIL$=CHR$(255):RET$=CHR$(13):BACKSP$=CHR$(8):LEFARR$=NUL$+CHR$(75):RIGARR$=NUL$+CHR$(77):UPARR$=NUL$+CHR$(72):DNARR$=NUL$+CHR$(80):ESC$=CHR$(27):TAB$=CHR$(9)
  368. 40110  INS$=NUL$+CHR$(82):DEL$=NUL$+CHR$(83):PGUP$=NUL$+CHR$(73):PGDN$=NUL$+CHR$(81):FKEY1$=NUL$+CHR$(59):FKEY2$=NUL$+CHR$(60):REGEX$=UPARR$+DNARR$+FKEY1$+TAB$:WTOP=5:WLEF=15:WBOT=19:WRIG=64:WSIZ=WBOT-WTOP+1
  369. 40120  PR=0:P1$="Display ":P2$="Print "
  370. 40150  DDRIVE$="A:":BDRIVE$="B:":PRNAM$="LPT1:":PRCOMP$=CHR$(15):PRUNCOMP$=CHR$(18):WIDEPR=-1
  371. 41000  OPEN"I",1,"WHICHDSK.DAT"
  372. 41010  INPUT#1,DDRIVE$,BDRIVE$:CLOSE#1
  373. 41050  OPEN"I",1,DDRIVE$+"SYSINFO.DAT"
  374. 41070  INPUT#1,PRNAM$,PRCODE$,NUMCL:FOR A=1 TO NUMCL:INPUT#1,CL$(A):NEXT:INPUT#1,NUMLG:FOR A=1 TO NUMLG:INPUT#1,LG$(A),LG(A):NEXT:CLOSE#1:LOADED=0
  375. 41080  GOTO 500
  376. 41500  T$="No Data Files Found":NUMCH=2:T$(1)="Proceed With First Time Start-up":T$(2)="Search for Data Files Again":T$(0)="End Session":GOSUB 21000
  377. 41510  ON CH GOTO 41520,41000,19010
  378. 41520  GOSUB 22500:GOTO 500
  379.